home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d1
/
dosdev.arc
/
TXSTK2.C
< prev
Wrap
Text File
|
1985-09-16
|
2KB
|
90 lines
/* Listing 5 - Test STKDEV2 using IOCTL for record transfer */
#include "stdio.h"
main() /* txstk.c - test XSTK device */
{struct {int scs,sss,sds,ses; } sregs;
struct {int ax,bx,cx,dx,si,di,ds,es; } callregs, retregs;
int n, handle, flags;
char setrecsize, chkrecsize;
char *dev = "XSTK";
char *outstr = "Hello";
char *instr;
segread(&sregs); /* sregs.sds = current ds */
callregs.ds = sregs.sds;
/* open XSTK in rw mode */
callregs.ax = 0x3D02;
callregs.dx = dev;
flags = sysint21(&callregs,&retregs);
if(flags & 1) printf("Open error %d\n",retregs.ax);
else handle = retregs.ax;
/* write outstr to XSTK one byte at a time using ioctl_out */
callregs.ax = 0x4403;
callregs.cx = 1;
callregs.bx = handle;
for(n=0;n<=4;n++)
{callregs.dx = &outstr[n];
flags = sysint21(&callregs,&retregs);
if(flags & 1) printf("Write error %d on char %d\n",retregs.ax,n);
}
/* read outstr from XSTK one byte at a time - ioctl_in */
callregs.ax = 0x4402;
callregs.cx = 1;
callregs.bx = handle;
for(n=0;n<=4;n++)
{callregs.dx = &instr[0];
flags = sysint21(&callregs,&retregs);
if(flags & 1) printf("Read error %d on char %d\n",retregs.ax,n);
else putchar(instr[0]);
}
putchar('\n');
/* change XSTK record size to 5 bytes with IN - OUT calls */
setrecsize = 5;
callregs.ax = 0x4000; /* set rec size */
callregs.cx = 1;
callregs.bx = handle;
callregs.dx = &setrecsize;
flags = sysint21(&callregs,&retregs);
callregs.ax = 0x3F00; /* read rec size from XSTK */
callregs.cx = 1;
callregs.bx = handle;
callregs.dx = &chkrecsize;
flags = sysint21(&callregs,&retregs);
printf("XSTK record size reset to %d bytes\n",chkrecsize);
/* write outstr to XSTK as a 5-byte record */
callregs.ax = 0x4403;
callregs.cx = 5;
callregs.bx = handle;
callregs.dx = &outstr[0];
flags = sysint21(&callregs,&retregs);
if(flags & 1) printf("Write error %d on char %d\n",retregs.ax,n);
/* read outstr from XSTK as a record */
callregs.ax = 0x4402;
callregs.cx = 5;
callregs.bx = handle;
callregs.dx = &instr[0];
flags = sysint21(&callregs,&retregs);
if(flags & 1) printf("Read error %d on char %d\n",retregs.ax,n);
else puts(instr);
} /* end txstk */
gs);
if(flags & 1) printf("Read error %d on char %d\n",retregs.ax,n);
else puts(instr